This invention relates to a method and apparatus for transmitting a data stream, (e.g., voice, video and/or data) through a Data Transmission Network and more particularly to the generation and transmission of additional parity packets and the use of the additional parity packets to reconstruct one or more information packets which are lost between transmission and reception.
In Data Transmission Networks, such as the Internet, information to be transmitted is often divided into segments. The information in each segment is combined with a header which includes source and destination addressing as well as control information. This combination of information is termed a xe2x80x9cpacket.xe2x80x9d A packet is transmitted through the Internet or any type of Data Transmission Network and is either received at its destination or it is lost along the way. Some causes of packet loss include transmission line errors, collisions between packets, traffic overload at a packet store-and-forward node, traffic overload at a router, or buffer overload at the sending or receiving station. Delayed forwarding of packets may cause a packet to appear so late that it is regarded as lost.
A number of approaches have been developed in order to recover the lost information. In the Internet context, one approach is the Transmission Control Protocol (TCP) for communications between hosts in packet switched Internet protocol networks. TCP recovers data that is damaged, lost, or duplicated or delivered out of order by assigning a sequence number to each OCTET(or Byte) and requiring a positive acknowledgment from the receiving side. If the acknowledgment is not received within a time out interval, the data is retransmitted. At the receiver, the sequence numbers are used to correctly order segments that may be received out of order and to eliminate duplicates. Damage of a packet is handled by adding a check sum to each segment transmitted, checking at the receiver, and discarding damaged segments.
The User Datagram Protocol (UDP) was created to provided a datagram mode of communication between hosts in packet switched Internet protocol networks. Damage is handled by adding a check sum to each segment transmitted, checking at the receiver, and discarding damaged segments. UDP is transaction oriented, and delivery and duplicate protection are not guaranteed. The User Datagram Protocol (UDP) is therefore not a suitable host-to-host protocol for certain applications, but it is possible to build a reliable host-to-host protocol on UDP.
The above described recovery systems do have drawbacks. With TCP, packet loss requires retransmission for recovery. In an Internet protocol network, packets may be lost due to congestion at any of multiple places in their journey from source to destination. When a transmission is restarted, it is restarted at the first segment which has not been acknowledged. This means that not only is the lost packet retransmitted, but all packets following the lost packet are also retransmitted. A significant portion of Internet traffic (the Internet being the largest example of an Internet protocol network), is made up of packets being retransmitted. The efficiency of systems which transmit information over the Internet is significantly impaired by the retransmission of these packets. Moreover, for certain streaming applications such as various audio and video transmissions where stream continuity is an important consideration, such retransmission based recovery systems are unreliable and can substantially impair transmission fidelity.
The invention described herein includes a method and apparatus for transmitting information in a data network from a first node to a second node. At the first (transmitting) node, the information to be transmitted is divided up into a plurality of information packets. Based on the information contained within some or all of the information packets, at least one parity packet (sometimes referred to below as a redundant packet) is generated and is included with the transmission of the information packets. When the packets reach the second (receiving) node, a check is made as to whether any of the packets have been damaged or lost. If either of these things has occurred, the parity packets are used in conjunction with the remaining transmission packets to reconstruct the packets that had been either lost or damaged. If reconstruction is not successful then retransmission occurs in a manner similar to TCP.
The present invention entails systems and processes for generating parity packets, for transmitting information packets and parity packets (collectively, xe2x80x9ctransmission packetsxe2x80x9d) within a network, and for using the parity packets to recover lost or damaged packets (sometimes herein collectively referred to as xe2x80x9clost packetsxe2x80x9d). In this regard, the invention may be embodied in: logic resident on a transmitting node for inter alia packetizing a data stream, generating parity packets and transmitting the transmission packets; and logic resident on a receiving node for inter alia receiving the transmission packets, identifying lost packets, using the parity packets to regenerate the lost packets, and recreating a data stream from the information packets. In addition, the receiving node contains logic to send acknowledgements and the sending node contains logic to retransmit packets based on acknowledgements received or based on non-receipt of acknowledgements. In addition, the invention may include a network structure, such as an FTP, WEB or Gigabyte Express server, for downloading transmitter/receiver logic and/or conveying transmission packet streams including parity packets between network nodes.
The parity packets are generated as a function of the data in the information packets. In one implementation, each bit in the payload portion of the parity packets is determined as a function of the corresponding bits in at least two information packets. In one aspect of the invention, the parity packet may be generated by an exclusive OR (XOR) operation performed on the information packets. In the event that a packet is lost during transmission, an XOR can be performed between the parity packet and the remaining packets to regenerate the lost packet. It will thus be appreciated that the parity packets, sometimes referred to herein as redundant packets, are not generally duplicate packets. It will be appreciated that duplicate packets could be sent and used to replace lost packets, thereby satisfying the objective of avoiding retransmission. However, the various parity packet systems described below reduce the total amount of extra packets that must be sent, i.e., transmission overhead.
Numerous parity packet implementations are possible. Inone implementation, one parity packet is transmitted with N information packets in order to recover one lost information packet (N+1:N parity). In another implementation, N parity packets are transmitted with (2Nxe2x88x921)xe2x88x92N information packets, where N is greater than or equal to 3, in order to recover all cases of one or two lost information packets and in many cases up to N lost information packets (2Nxe2x88x921:(2Nxe2x88x921)xe2x88x92N). In any such case, the grouping of information packets and parity packets derived therefrom is termed a xe2x80x9cchunkxe2x80x9d. The sending side may change the number of packets within a chunk, as well as the type of parity (or redundancy) for the chunk (including the option of no parity packets) in response to detecting retransmissions or other feedback on the progress of the data stream""s transmission.
According to another aspect of the invention, M chunks can be further combined into a superchunk in which the information and parity packets of all the chunks are interleaved in such a fashion that minimizes the effect of a burst of packets being lost during transmission. When such interleaving is implemented with N+1:N parity, a block of M successive packets may be lost and successfully regenerated. When interleaving is used with 2Nxe2x88x921:(2Nxe2x88x921)xe2x88x92N parity, a block of 2M successive packets may be lost and successfully regenerated. In this regard, the size of the superchunks (i.e., the number of chunks within a superchunk) can be selected to address the largest bursts of lost packets that are expected. For example, such burst events can be monitored to allow for dynamic superchunk reconfiguration, e.g., to tune the transmission structure (chunk size, superchunk size and/or parity type) based on current or historic network conditions.
Each of the packets transmitted may contain identifying information in a header. Included in the header may be information concerning: which chunk the packet is within, the payload length of the packet, the parity type (redtype), a unique identifier of the packet, and a unique identifier of the chunk. After the information packets are received and checked, this header information may be used in an acknowledgment which may be transmitted back to the transmitting node. The choice of the parity type, the choice of N (chunk size), and the choice of M (superchunk size) may be changed dynamically as noted above, or it may be changed manually based on empirical observations.